package com.example.cobbledialognpc.command;

import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Arrays;
import java.util.List;

/**
 * 帮助命令
 * 用法: /cdn help
 * 支持玩家和控制台执行
 */
public class HelpCommand extends SubCommand {

    @Override
    @NotNull
    public String getName() {
        return "help";
    }

    @Override
    @NotNull
    public String getDescription() {
        return "显示帮助信息（支持控制台执行）";
    }

    @Override
    public String getUsage() {
        return "/cdn help";
    }

    @Override
    @Nullable
    public String getPermission() {
        return "cobbledialognpc.command.use";
    }

    @Override
    public void onCommand(Player player, String[] args) {
        sendHelpMessage(player);
    }

    @Override
    public void onCommand(ConsoleCommandSender console, String[] args) {
        sendHelpMessage(console);
    }

    /**
     * 发送帮助信息
     * @param sender 命令发送者
     */
    private void sendHelpMessage(CommandSender sender) {
        sender.sendMessage("§7=== CobbleDialogNPC 帮助 ===");
        sender.sendMessage("§f/cdn help - §a显示此帮助信息");
        
        if (sender instanceof Player) {
            sender.sendMessage("§f/cdn open <配置文件> [玩家名称] - §a打开指定的对话配置文件");
            sender.sendMessage("§7  - 玩家执行时，如果不指定玩家名称，则为自己打开对话");
            sender.sendMessage("§7  - 指定其他玩家需要权限: cobbledialognpc.command.open.others");
        } else {
            sender.sendMessage("§f/cdn open <配置文件> <玩家名称> - §a为指定玩家打开对话配置文件");
            sender.sendMessage("§7  - 控制台执行时必须指定目标玩家名称");
        }
        
        sender.sendMessage("§7");
        sender.sendMessage("§7权限说明:");
        sender.sendMessage("§7  - cobbledialognpc.command.use: 使用基本命令");
        sender.sendMessage("§7  - cobbledialognpc.command.open: 打开对话配置");
        sender.sendMessage("§7  - cobbledialognpc.command.open.others: 为其他玩家打开对话");
    }

    @Override
    public List<String> onTabComplete(CommandSender sender, String[] args) {
        return Arrays.asList();
    }
}